using CommunityToolkit.Mvvm.ComponentModel;
using RadioTimer.Services;
using System.ComponentModel;
using System.Runtime.CompilerServices;

namespace RadioTimer.ViewModels
{
    /// <summary>
    /// ViewModel基类
    /// 使用CommunityToolkit.Mvvm实现INotifyPropertyChanged接口，为所有ViewModel提供基础的属性变更通知功能
    /// 符合MVVM架构模式的设计原则，支持数据绑定和界面更新
    /// 包含通用的加载状态管理功能和生命周期方法
    /// </summary>
    public partial class BaseViewModel : ObservableObject
    {
        #region 私有字段
        
        /// <summary>
        /// 是否正在执行操作的私有字段
        /// </summary>
        [ObservableProperty]
        private bool _isBusy;
        
        /// <summary>
        /// 日志服务实例
        /// </summary>
        protected readonly ILogService? LogService;
        
        #endregion
        
        #region 构造函数
        
        /// <summary>
        /// 初始化BaseViewModel实例
        /// </summary>
        public BaseViewModel()
        {
            // 尝试从ServiceProvider获取日志服务实例
            try
            {
                LogService = App.ServiceProvider.GetService<ILogService>();
            }
            catch
            {
                // 如果无法获取日志服务，不进行任何操作
            }
        }
        
        #endregion
        
        #region 保护方法
        
        /// <summary>
        /// 记录日志
        /// </summary>
        /// <param name="message">日志消息</param>
        /// <param name="level">日志级别</param>
        protected void Log(string message, string level = "Info")
        {
            LogService?.Log(message, level);
        }
        
        /// <summary>
        /// 记录错误日志
        /// </summary>
        /// <param name="message">错误消息</param>
        protected void LogError(string message)
        {
            LogService?.Log(message, "Error");
        }
        
        /// <summary>
        /// 记录警告日志
        /// </summary>
        /// <param name="message">警告消息</param>
        protected void LogWarning(string message)
        {
            LogService?.Log(message, "Warning");
        }
        
        #endregion
    }
}